#include <iostream>
#include <stdlib.h>

using namespace std;

struct Listnode
{
    int data;
    Listnode* next;
};

Listnode* creat_list(int* a,int number)
{
    Listnode* head=(Listnode*)malloc(sizeof(Listnode));
    Listnode* p=head;
    for(int i=0;i<number;i++)
    {
        p->data=*(a+i);
        Listnode* p1=(Listnode*)malloc(sizeof(Listnode));
        p1->next=NULL;
        p->next=p1;
        p=p1;
    }
   
    return head;
}

void display_list(Listnode* head)
{
    while(head->next!=NULL)
    {
        cout<<head->data;
        head=head->next;
    }
}

void display_list1(Listnode* head)
{
    while(head!=NULL)
    {
        cout<<head->data;
        head=head->next;
    }
}

Listnode* return_list(Listnode* head)
{
    Listnode* p1=NULL;
    Listnode* p2=head;
    Listnode* p3=p2;

    while(p2->next)
    {
        p3=p2->next;
        p2->next=p1;
        p1=p2;
        p2=p3;
    }

    return p1;
}
            
int main ()
{
    int a[]={1,2,3,4,5};
    int n=5;
    Listnode* head=creat_list(a,n);
    display_list(head);
    head=return_list(head);
    display_list1(head);

    system("pause");
    return 0;
}


// FIXME:
//    1. 做的挺认真的，不过还是有些小建议
//    2. 你可以想想，能否把几个可以共用基本代码的程序放在一起，就是结构体的定义共用，然后不同的函数依次在后面实现，在下面实现几个不同的测试函数来测试每一个功能
//    3. 扥你把基本的链表学完并实现了之后，尝试用C++类的方法重新实现一下List，然后再考虑用template实现类似STL的
//    4. 通过这样的练习，能够将前面学的应用的实际，这样能够加深对C++的类、模版的理解

